/***************************************************************************
 *   This library is free software; you can redistribute it and/or         *
 *   modify it under the terms of the GNU General Public                   *
 *   License as published by the Free Software Foundation;                 *
 *   version 2 of the License.                                             *
 *                                                                         *
 *   As a special exception, you may use this file as part of a free       *
 *   software library without restriction.  Specifically, if other files   *
 *   instantiate templates or use macros or inline functions from this     *
 *   file, or you compile this file and link it with other files to        *
 *   produce an executable, this file does not by itself cause the         *
 *   resulting executable to be covered by the GNU General Public          *
 *   License.  This exception does not however invalidate any other        *
 *   reasons why the executable file might be covered by the GNU General   *
 *   Public License.                                                       *
 *                                                                         *
 *   This library is distributed in the hope that it will be useful,       *
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU     *
 *   Lesser General Public License for more details.                       *
 *                                                                         *
 *   You should have received a copy of the GNU General Public             *
 *   License along with this library; if not, write to the Free Software   *
 *   Foundation, Inc., 59 Temple Place,                                    *
 *   Suite 330, Boston, MA  02111-1307  USA                                *
 *                                                                         *
 ***************************************************************************/

#include "BufferPolicy.hpp"
#include <iostream>

namespace RTT {

std::ostream &operator<<(std::ostream &os, const BufferPolicy &bp)
{
    switch(bp) {
        case UnspecifiedBufferPolicy: os << "(unspecified buffer policy)"; break;
        case PerConnection:           os << "PerConnection"; break;
        case PerInputPort:            os << "PerInputPort"; break;
        case PerOutputPort:           os << "PerOutputPort"; break;
        case Shared:                  os << "Shared"; break;
        default:                      os << "(unknown buffer policy)"; break;
    }
    return os;
}

std::istream &operator>>(std::istream &is, BufferPolicy &bp)
{
    std::string s;
    is >> s;
    if (s == "PerConnection")      bp = PerConnection;
    else if (s == "PerInputPort")  bp = PerInputPort;
    else if (s == "PerOutputPort") bp = PerOutputPort;
    else if (s == "Shared")        bp = Shared;
    else                           bp = UnspecifiedBufferPolicy;
    return is;
}

} // namespace RTT
